{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# Optional Lab: Linear Regression using Scikit-Learn"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "There is an open-source, commercially usable machine learning toolkit called [scikit-learn](https://scikit-learn.org/stable/index.html). This toolkit contains implementations of many of the algorithms that you will work with in this course.\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Goals\n",
    "In this lab you will:\n",
    "- Utilize  scikit-learn to implement linear regression using Gradient Descent"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Tools\n",
    "You will utilize functions from scikit-learn as well as matplotlib and NumPy. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import SGDRegressor\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from lab_utils_multi import  load_house_data\n",
    "from lab_utils_common import dlc\n",
    "np.set_printoptions(precision=2)\n",
    "plt.style.use('./deeplearning.mplstyle')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# Gradient Descent\n",
    "Scikit-learn has a gradient descent regression model [sklearn.linear_model.SGDRegressor](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDRegressor.html#examples-using-sklearn-linear-model-sgdregressor).  Like your previous implementation of gradient descent, this model performs best with normalized inputs. [sklearn.preprocessing.StandardScaler](https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler) will perform z-score normalization as in a previous lab. Here it is referred to as 'standard score'."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Load the data set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "X_train, y_train = load_house_data()\n",
    "X_features = ['size(sqft)','bedrooms','floors','age']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Scale/normalize the training data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Peak to Peak range by column in Raw        X:[2.41e+03 4.00e+00 1.00e+00 9.50e+01]\n",
      "Peak to Peak range by column in Normalized X:[5.85 6.14 2.06 3.69]\n"
     ]
    }
   ],
   "source": [
    "scaler = StandardScaler()\n",
    "X_norm = scaler.fit_transform(X_train)\n",
    "print(f\"Peak to Peak range by column in Raw        X:{np.ptp(X_train,axis=0)}\")   \n",
    "print(f\"Peak to Peak range by column in Normalized X:{np.ptp(X_norm,axis=0)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Create and fit the regression model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SGDRegressor()\n",
      "number of iterations completed: 111, number of weight updates: 10990.0\n"
     ]
    }
   ],
   "source": [
    "sgdr = SGDRegressor(max_iter=1000)\n",
    "sgdr.fit(X_norm, y_train)\n",
    "print(sgdr)\n",
    "print(f\"number of iterations completed: {sgdr.n_iter_}, number of weight updates: {sgdr.t_}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### View parameters\n",
    "Note, the parameters are associated with the *normalized* input data. The fit parameters are very close to those found in the previous lab with this data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "model parameters:                   w: [109.95 -20.97 -32.35 -38.07], b:[363.15]\n",
      "model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16\n"
     ]
    }
   ],
   "source": [
    "b_norm = sgdr.intercept_\n",
    "w_norm = sgdr.coef_\n",
    "print(f\"model parameters:                   w: {w_norm}, b:{b_norm}\")\n",
    "print( \"model parameters from previous lab: w: [110.56 -21.27 -32.71 -37.97], b: 363.16\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Make predictions\n",
    "Predict the targets of the training data. Use both the `predict` routine and compute using $w$ and $b$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "prediction using np.dot() and sgdr.predict match: True\n",
      "Prediction on training set:\n",
      "[295.17 485.84 389.62 492.  ]\n",
      "Target values \n",
      "[300.  509.8 394.  540. ]\n"
     ]
    }
   ],
   "source": [
    "# make a prediction using sgdr.predict()\n",
    "y_pred_sgd = sgdr.predict(X_norm)\n",
    "# make a prediction using w,b. \n",
    "y_pred = np.dot(X_norm, w_norm) + b_norm  \n",
    "print(f\"prediction using np.dot() and sgdr.predict match: {(y_pred == y_pred_sgd).all()}\")\n",
    "\n",
    "print(f\"Prediction on training set:\\n{y_pred[:4]}\" )\n",
    "print(f\"Target values \\n{y_train[:4]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "### Plot Results\n",
    "Let's plot the predictions versus the target values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<Figure size 864x216 with 4 Axes>",
      "image/png": "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crncYNmVK1fQoUMHS1epVWuNn2l9bag1vSdrfbjtMntkrTbEbZc1V0NtiLuIMMYYY4wxZkYcYDPGGGOMMWZGHGAzxhhjjDFmRhxgM8YYY4wxZkYcYDPGGGOMMWZGHGC3cqGhoUhJSQEAvP3223j66aetW6FCNfB7AvBDrO5vodq69WHMXvC+w+xVa2+7rX37WJNwHuw2ZM6cOY163qRJkxAUFIRFixaZtwKFamBzHFCUcbvsUhowJtmmpztlzOp432H2qrW33da+fazJ+Aq2HdFoNNauQvPsUxoehADd431K69SHMXvB+w6zV6297bb27WNNxgF2Qyxw6yc0NBTvvPMOevbsCR8fHzz11FOoqKjAjh07EBQUhPfeew/+/v546qmnoNVq8e677yIsLAy+vr547LHHcP36df261q5di5CQEPj6+uKtt94yeJ8FCxYgISFB/3jPnj2455574O3tjeDgYKxevRorVqzAunXrsHjxYnh4eGD06NHm29DSXJHyPPO9B2OtEe87zF619rbb2rePNZnFA+z169fjjjvugLu7O8LCwrB7924AQGpqKnr06AE3NzfExsYiOztb/xoiwqxZs+Dr6wtfX1/MnDkTFpmAsubWz5l1QO4O3d/NcS0SZK9btw6//fYbMjIycObMGX33jEuXLuH69evIzs7GihUr8N///hebNm3Czp07kZeXBx8fH7zwwgsAgBMnTuC5557D2rVrkZeXh2vXruHChQuC73f+/HmMGjUKL774Iq5cuYIjR46gb9++mDp1KuLj4zFz5kyUlJTgxx9/NN9GugeKlAeY7z0Ya41432H2qrW33da+fazJLBpgJycnY9asWVi1ahWKi4uxa9cudOnSBVevXsW4ceOgUqlw/fp1DBgwAI8//rj+dStWrMCmTZtw9OhRHDt2DD/99BOWL1/e8hW24K2f6dOnIzg4GO3atcPcuXPx7bffAgAcHBzw73//Gy4uLnB1dcXy5cvx1ltvISgoCC4uLliwYAG+//57aDQafP/993jwwQcRHR0NFxcXqFQqODgIf8Xr1q3D8OHD8cQTT8DJyQm+vr7o27eveTZG7Kp/lArwCjN8rleYrpwxJi5KBXh0Nizz6Mz7DrN9raHt1ncnm89rTIRFBznOnz8fb775JgYOHAgACAzU/fJbsWIFIiIi8OijjwLQdWVo3749Tp06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jL+/P2QymVnX+eGHH2Lq1KmCwW9znD17FjExMQgNDUWHDh1EnxcYGIhhw4bh008/Nev7s9atsrLS2lVgbdjZs2fh4OCAMWPGwN/fH66urhZ5X273jLUOHGBbwZ49ezB48GB4enrC09MTffr0wW+//QbAsIvIggULIJFIjP5NmjRJv67k5GQMHjwYrq6uCAwMxFNPPYVr167plx85cgTp6el4+OGHDerwxRdf4I477oBMJoOvry+io6Nx4cIF/fLvvvsO4eHhkMlkuOeee7BlyxZIJBLs2bMHWVlZkEgkyMjIwJtvvgmJRIKhQ4diwoQJ+m2oW8+xY8eavesLsxytVos33ngD7du3h5eXF55++mmUl5frl3/88cfo0aMHZDIZunbtirfeegsajUa//MaNG3j88cfh7u4OPz8/zJs3D3UnkR06dCimTJkCpVKJTp06ITAwEACQlpaG6OhouLq6wsfHB08++STy8/MNXrtmzRr07NkTLi4uCAoKwrx58wzev2bd8+bNQ8eOHeHt7Y25c+dCq9Vi4cKF8PPzQ4cOHTB37lyD9W7evBn9+vWDm5sbvL29ERkZicOHD5vtc2W2adKkSZgwYQK0Wq3+eCakoXZXVVWFN954A4GBgXB2dkbPnj3xzTffGKxDIpHgv//9L5588knI5XLEx8cDAN5++2106dIFLi4u6NChA+6//36DfY6xpkhOTsbQoUPRrl07yOVyxMTEYP/+/frlarUaI0aMgEwmQ+fOnfHJJ58YdRPUaDRYsGABFAoFZDIZIiIisHz5cmtsjm1r5nTvzEQajYZ8fHzolVdeoTNnztCZM2do48aNtGvXLiIiAkBr164lIqLi4mK6ePGi/t+WLVvI0dGRVq1aRUREqamp5OrqSv/973/pzJkztH//fho6dCjde++9pNVqiYho6dKlFBgYaFCHgwcPklQqpTVr1lBWVhYdO3aMVq5cSTk5OURE9Ndff5FEIqE33niDTp06RRs2bKDQ0FACQLt37yaNRkMXL16koKAgmjVrFl28eJEKCwtp2bJlBEBf34KCAv17pqenEwA6ceJES3/EzMxiYmLI09OTnn76aTpx4gRt2bKFOnToQC+++CIREc2fP586d+5MGzdupMzMTPr5558pODiY5s2bp1/Hww8/TGFhYZSamkrHjx+n+Ph48vT0pGHDhhm8j4eHB02bNo3S09Pp2LFjdPHiRfL09KQnnniCjh07Rrt376ZevXrRkCFD9K/76aefyMHBgd5++206ffo0rV+/nry9vQ3ePyYmhry8vGjmzJl0+vRp+vLLLwkAjRo1il5//XU6ffo0rV69mgDQL7/8QkREFy9eJCcnJ3rvvfcoMzOTTpw4QevWraNjx4619EfOrKygoICWLl1KUqlUfzybP38+hYWF6Z/TmHb32muvUbt27ei7776j06dP01tvvUUSiYRSUlL0zwFA7dq1o//+97907tw5On36NG3YsIE8PT1py5YtlJ2dTYcPH6YPP/yQysrKLPo5sNZn48aN+vZ4/PhxmjJlCvn4+NDVq1dJq9VSnz59KDIykvbt20eHDx+mUaNGkZeXF02ZMkW/jsTEROrVqxf99ttvlJmZSevXrye5XE5ffPGFFbfM9nCAbWHXr18nALR9+3bB5bUD7NrOnz9P/v7+9Prrr+vLYmJiaNasWQbPy87OJgB0+PBhIiJ66aWXKDIy0uA5GzduJC8vLyosLBSsQ3x8PA0aNMig7OOPP9YH2DVCQkJIpVLpH69du5bEfrMVFhYSAPrpp58ElzPbFRMTQyEhIaTRaPRly5cvJ2dnZyopKSFXV1faunWrwWvWrFlDcrmciIjOnj1LAOj333/XL7958yYFBAQYBdhdu3al6upqfdm8efMoMDCQbt68qS87cuQIAaCdO3cSEdGQIUPo0UcfNXj/pUuXkkwm078uJiaG+vTpY/Ccnj170p133mlQ1rt3b5oxYwYR6X5oAiC1Wt2Yj4m1MqtWrSKpVKp/XDfAbqjdlZaWkrOzM33yyScGz3n44YcpNjZW/xgATZ482eA5H3zwAXXt2pUqKyvNuUmMGamuriZvb29KSkqi33//nQDQ2bNn9cuvXbtGrq6u+gA7MzOTJBIJnTx50mA9//73v42OsW0ddxGxMB8fHzz99NO4//77MWrUKLz77rs4ffp0va8pKSnB6NGjMWjQILz77rv68gMHDmDp0qXw8PDQ/+vZsycAXf9BACgvLzfq0x0XF4cuXbpAoVBg/PjxWLFiBa5evapffuLECQwePNjgNUOGDGnWdtfUgW9x2qfIyEhIpVL948GDB6OyshIHDx5EeXk5HnnkEYN2OG3aNBQWFuLKlSs4ceIEAOCee+7Rv97Z2Rl333230fvcddddcHC4fVhKT0/HwIED4ezsrC/r06cP5HI50tPT9c+Jjo42WE9MTAwqKiqQkZFh8Lra/P390bt3b6Oymu4nvXv3xv33348777wTY8eOxUcffYScnJzGfWCs1Wuo3Z07dw6VlZWCz6lpuzUiIyMNHj/22GOoqqpCSEgIJk2ahLVr16K4uLhlNoS1KWq1GhMmTEB4eDi8vLzg5eWFwsJCZGdn48SJE2jfvr1Btpx27dqhe/fu+scHDx4EEWHAgAEGx/y3335bH3cwHQ6wrWDlypU4dOgQ4uLisHPnTtx5552i/Ze0Wi2efPJJODk5ISkpySD40Gq1mDVrFo4cOWLw7+zZsxg1ahQAoEOHDrh+/brBOj08PHDw4EH88MMP6NatGz7//HOEh4fj0KFDAAAiMvuAyJo61DcYktkPqtN/+n//+59BG/z7779x9uxZtGvXzui59XF3dzcqE2uLtcvrPqfmPWuXOzk5Gb1eqEyr1QIApFIptm7dim3btuHuu+/Ghg0b0K1bN/z000+N3h7WujWm3Qk9p25Z3XYfGBiIU6dO4auvvkLHjh2hUqnQvXt3/oHHmu3BBx/E+fPn8cknnyAtLQ1HjhxBx44d9YNrGzr31xwf//jjD4Nj/vHjx3Hs2LEWr7894QDbSu688068+uqr2Lp1K6ZMmYIVK1YIPu+1117DkSNH8OOPP8LNzc1g2YABA5Ceno7w8HCjfx4eHgCA/v374+zZs0Yj06VSKaKjo7Fw4UIcOnQInTp10g++iYiIwN69ew2eX/exkJqrjNXV1UbL/v77b0ilUvTr16/B9TDbc+DAAYPv9c8//4SzszP69u0LmUyGzMxMwXYolUoREREBQHdArlFZWYkDBw40+L4RERH4888/Ddrv0aNHUVhYqF9vREQEdu7cafC6Xbt2wdXVFV26dGnWdkskEkRGRmLOnDnYtWsXYmJisGrVqmatk7UODbW78PBwuLi4CD6npu3Wx8XFBSNHjsTixYvx999/o6ysDJs2bTLnJrA25tq1azhx4gTeeOMN3H///ejZsydkMpn+rl3Pnj1x5coVnDt3Tv+aGzdu4MyZM/rHd911FwDg/PnzRsf7sLAwy26QjXO0dgXamnPnzmHlypUYPXo0goODkZeXh927d6N///5Gz129ejU+/fRTbNmyBQBw6dIlAICrqyvkcjkWLlyIESNG4JVXXkFiYiI8PT1x9uxZ/O9//8OyZcvg6uqK2NhYSCQS7Nu3D/feey8AXWaEzMxMREdHo0OHDjh06BBycnL03UteeeUV3H333Zg7dy4SExORnp6OJUuWNLhtCoUCALBlyxYMGTIErq6u+kB/x44dGDJkCLy8vJr/ITKLu3btGl544QW89NJLyMzMhFKpxDPPPAO5XI45c+Zgzpw5AHTdjzQaDf7++28cPnwY7733HsLDw/HQQw/hhRdewPLly+Hn54d33323Ube8p0+fjo8++giTJk3CnDlzUFBQgOeffx5DhgzRt+fZs2dj9OjRePfddzFu3DgcOXIECxYswIwZMwy6lpjqjz/+QGpqKkaMGIFOnTrh7NmzOHbsGKZMmdLkdbLWo6F25+zsjH/9619QKpXo0KED+vbti//973/YvHkzkpOT6133l19+Ca1Wi8jISHh7eyM1NRXFxcX6YzRjTeHj44MOHTpg5cqVCAsLw7Vr1zBz5kx9Csrhw4ejT58+mDhxIj766CM4Oztj7ty5cHR01F/ZDg8Px+TJk/HMM89g8eLFGDRoEEpLS3Ho0CFcuXIFs2bNsuYm2hYr9v9uk/Ly8mjs2LEUGBhIzs7O1KlTJ3r66af1GTdQa5BjYmIiATD6l5iYqF/frl27aNiwYeTh4UFubm7Uo0cPeumll6iqqkr/nEmTJtEzzzyjf7xz506KjY2l9u3bk4uLC4WHh9M777yjzzxCRPTtt99Sly5dyNnZmSIjI2nTpk0NDnIk0g2q7NixI0kkEn09tVothYaG0jfffGO2z5FZTkxMDD311FP6jAgeHh701FNPUWlpqf45X3zxBfXp04dcXFzI29ubIiMj6dNPP9Uvv3r1Kj366KPk5uZG7du3pzfeeIMmTpxoNMix9kj1Gn/++Sfde++9JJPJSC6X0xNPPEGXL182eM7q1aupR48e5OTkRAEBATRnzhyDfUBo3cOGDTPYl4iI7r//foqPjyciouPHj9OoUaPIz8+PnJ2dqXPnzvTaa68ZDLhkrVdDgxyJGm53lZWVNGvWLAoICCAnJye64447aN26dQbrgMDA9g0bNtCgQYPI29ubXF1dKSIigjM0MLPYsWMH9e7dm1xcXKhbt270/fffU1hYGM2fP5+IdIMYhw8fTi4uLhQUFETLli2ju+++m6ZPn65fh0ajoffee4+6d+9OTk5O5OvrS9HR0fTdd99Zaatsk4TIhA6SzC5lZGTou5MEBAQ0aR1ZWVlQKBTYvXu3yQMev/vuO6hUKhw5csRgoBxjjDHGbFdxcTGCgoKwaNEivPjii9aujl3hLiJtQFhYGJYvXw61Wt3kALs5bt68iVWrVnFwzRhjjNmwLVu2wNHREXfccQfy8/Px73//GxKJBI899pi1q2Z3OMBuI6y5c9TM8MgYY4wx21VWVoaFCxciKysL7u7uuOuuu7Bnzx74+flZu2p2h7uIMMYYY4wxZkacpo8xxhhjjDEz4gCbMcYYY4wxM+IAmzHGGGOMMTPiAJsxxhhjjDEz4gCbMcYYY4wxM+IAmzHGGGOMMTP6fz/HIEud/MPwAAAAAElFTkSuQmCC\n"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot predictions and targets vs original features    \n",
    "fig,ax=plt.subplots(1,4,figsize=(12,3),sharey=True)\n",
    "for i in range(len(ax)):\n",
    "    ax[i].scatter(X_train[:,i],y_train, label = 'target')\n",
    "    ax[i].set_xlabel(X_features[i])\n",
    "    ax[i].scatter(X_train[:,i],y_pred,color=dlc[\"dlorange\"], label = 'predict')\n",
    "ax[0].set_ylabel(\"Price\"); ax[0].legend();\n",
    "fig.suptitle(\"target versus prediction using z-score normalized model\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## Congratulations!\n",
    "In this lab you:\n",
    "- utilized an open-source machine learning toolkit, scikit-learn\n",
    "- implemented linear regression using gradient descent and feature normalization from that toolkit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}